/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ares.service.sapimpl;

import com.ares.service.bean.BeanUserSub;
import com.ares.service.bean.BeanUsuario;
import com.ares.service.dao.Usuarios_I;
import com.ares.service.sap.ConexionSAP;
import com.ares.service.util.Util;

import java.util.ArrayList;
import java.util.List;
//import org.apache.log4j.Logger;

/**
 *
 * @author LENOVO
 */
public class SapUsuarios implements Usuarios_I {
// la lista de los empleados subordinados de la personal que ingresa al sistema

    //private Logger logger = Logger.getLogger(SapUsuarios.class);

    public List<BeanUserSub> getLstUsuarioSubor(String idposc) throws Exception {
        List<BeanUserSub> lstUser = new ArrayList<BeanUserSub>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try {
            conSAP.RegistrarRFC("ZHR_RFC_BUSQ_COLAB");
            conSAP.IngresarDatosInput(idposc, "ID_JEFE");
            conSAP.EjecutarRFC();
            com.sap.mw.jco.JCO.Table usuario = null;

            usuario = conSAP.rFC.getTableParameterList().getTable("T_SUBORDINADO");
            for (int i = 0; i < usuario.getNumRows(); i++) {
                usuario.setRow(i);
                BeanUserSub user = new BeanUserSub();
                user.setStrApaterno(usuario.getString("APATERNO"));
                user.setStraMaterno(usuario.getString("AMATERNO"));
                user.setStrNombre(usuario.getString("NOMBRE"));
                user.setStrNombreComp(usuario.getString("NOMBCOMP"));
                user.setStrDescrip_Idp(usuario.getString("DESCRIP_IDP"));
                user.setIntId_posc(usuario.getInt("ID_POSC"));
                user.setStrIdEmpleado(usuario.getString("ID_EMPLEADO"));
                user.setStrIdArea(usuario.getString("ID_AREA"));
                user.setStrArea(usuario.getString("DESC_AREA"));
                //user.setDbltope_org(Double.parseDouble(usuario.getString("TOPE_ORG")));
                try {
                	if (usuario.getString("TOPE_ORG").equals("")) {
                		 user.setDbltope_org(0);
					}else
                	 user.setDbltope_org(Double.parseDouble(usuario.getString("TOPE_ORG")));
                } catch (ClassCastException e) {
                	 user.setDbltope_org(0);
                 } 
                                
                user.setDblTotal_Tope_Max(Double.parseDouble(usuario.getString("TOTAL_TOPE_MAX")));
                user.setDblTotal_Tope_Min(Double.parseDouble(usuario.getString("TOTAL_TOPE_MIN")));
                user.setIntTope_ad_sup(usuario.getInt("TOPE_AD_INF"));
                user.setIntTope_ad_inf(usuario.getInt("TOPE_AD_SUP"));
                user.setStrEtapa(usuario.getString("DESC_ETAPA"));
                user.setStrDescCompetencia(usuario.getString("DESC_ESTADO_COMP"));
                user.setStrDescIntegral(usuario.getString("DESC_ESTADO_EVALINT"));
                user.setStrDescPlanAccion(usuario.getString("DESC_ESTADO_PLANACC"));
//                Alex
                user.setEvaluadorFuncional(usuario.getString("TIENE_FUNC"));
              //Obtener el mail de Evaluador
                user.setMailEvaluador(usuario.getString("MAIL_EVALDR"));
                user.setMailFuncional(usuario.getString("MAIL_FUNC"));
//                Fin Alex
                
                if(usuario.getString("DESC_ESTADO").equals("ABIERTO")){
                    user.setStrEstado("PENDIENTE");
                }
                else{
                    user.setStrEstado(usuario.getString("DESC_ESTADO"));
                }

                if(user.getStrDescCompetencia().equals("")){
                    user.setStrDescCompetencia("PENDIENTE");
                }

                if(user.getStrDescIntegral().equals("")){
                    user.setStrDescIntegral("PENDIENTE");
                }

                if(user.getStrDescPlanAccion().equals("")){
                    user.setStrDescPlanAccion("PENDIENTE");
                }

                user.setStrIdEstado(usuario.getString("ID_ESTADO"));
                user.setStrIdEtapa(usuario.getString("ID_ETAPA"));
                user.setStrID_Funcion(usuario.getString("ID_FUNCION"));
                user.setMail(usuario.getString("MAIL"));
                lstUser.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            conSAP.DesconectarSAP();
        }

        return lstUser;
    }

    public List<BeanUserSub> getLstUsuarioSubor1(String idposc, String periodo) throws Exception {
        List<BeanUserSub> lstUser = new ArrayList<BeanUserSub>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        try {
//        	System.out.println("getLstUsuarioSubor1");
            conSAP.RegistrarRFC("ZHR_RFC_BUSQ_COLAB");
            conSAP.IngresarDatosInput(idposc, "ID_JEFE");
//            	System.out.println("idposc: " + idposc);
            conSAP.IngresarDatosInput(periodo, "PERIODO");
//            	System.out.println("periodo: " + periodo);
            conSAP.EjecutarRFC();
            com.sap.mw.jco.JCO.Table usuario = null;

            usuario = conSAP.rFC.getTableParameterList().getTable("T_SUBORDINADO");
//            System.out.println("usuario Num Filas: " + usuario.getNumRows());
            
            for (int i = 0; i < usuario.getNumRows(); i++) {
            	//System.out.println("Entro al bucle");
                usuario.setRow(i);
                BeanUserSub user = new BeanUserSub();
                user.setStrApaterno(usuario.getString("APATERNO"));
                user.setStraMaterno(usuario.getString("AMATERNO"));
                user.setStrNombre(usuario.getString("NOMBRE"));
                user.setStrNombreComp(usuario.getString("NOMBCOMP"));
                user.setStrDescrip_Idp(usuario.getString("DESCRIP_IDP"));
                user.setIntId_posc(usuario.getInt("ID_POSC"));
                user.setStrIdEmpleado(usuario.getString("ID_EMPLEADO"));
                user.setStrIdArea(usuario.getString("ID_AREA"));
                user.setStrArea(usuario.getString("DESC_AREA"));
                
                try {
                	if (usuario.getString("TOPE_ORG").equals("")) {
                		 user.setDbltope_org(0);
					}else
                	 user.setDbltope_org(Double.parseDouble(usuario.getString("TOPE_ORG")));
                } catch (ClassCastException e) {
                	 user.setDbltope_org(0);
                 } 
               
                
                user.setDblTotal_Tope_Max(Double.parseDouble(usuario.getString("TOTAL_TOPE_MAX")));
                user.setDblTotal_Tope_Min(Double.parseDouble(usuario.getString("TOTAL_TOPE_MIN")));
                user.setIntTope_ad_sup(usuario.getInt("TOPE_AD_INF"));
                user.setIntTope_ad_inf(usuario.getInt("TOPE_AD_SUP"));
                user.setStrEtapa(usuario.getString("DESC_ETAPA"));
                user.setStrDescCompetencia(usuario.getString("DESC_ESTADO_COMP"));
                user.setStrDescIntegral(usuario.getString("DESC_ESTADO_EVALINT"));
                user.setStrDescPlanAccion(usuario.getString("DESC_ESTADO_PLANACC"));
                user.setStrDescPotencial(usuario.getString("DESC_ESTADO_PLANACC"));
                
                if(usuario.getString("DESC_ESTADO").equals("ABIERTO")){
                    user.setStrEstado("PENDIENTE");
                }
                else{
                    user.setStrEstado(usuario.getString("DESC_ESTADO"));
                }

                if(user.getStrDescCompetencia().equals("")){
                    user.setStrDescCompetencia("PENDIENTE");
                }

                if(user.getStrDescIntegral().equals("")){
                    user.setStrDescIntegral("PENDIENTE");
                }

                if(user.getStrDescPlanAccion().equals("")){
                    user.setStrDescPlanAccion("PENDIENTE");
                }

                user.setStrIdEstado(usuario.getString("ID_ESTADO"));
                user.setStrIdEtapa(usuario.getString("ID_ETAPA"));
                user.setStrID_Funcion(usuario.getString("ID_FUNCION"));
                user.setMail(usuario.getString("MAIL"));
                //DVQ: SE AGREGA COLUMNAS PARA EL ESTADO DE EVALUACION DE POTENCIAL
                user.setIdEstadoPotencial(usuario.getString("ID_ESTADO_POTEN"));
                
                if(usuario.getString("DESC_ESTADO_POTEN").equals("")){
                	user.setDescripcionEstadoPotencial("PENDIENTE");
                }else{
                	user.setDescripcionEstadoPotencial(usuario.getString("DESC_ESTADO_POTEN"));
                }
                
                lstUser.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            conSAP.DesconectarSAP();
        }

        return lstUser;
    }

//    Alex
    public List<BeanUserSub> getLstUsuarioSuborFuncionales(String idposc, String periodo) throws Exception {
        List<BeanUserSub> lstUser = new ArrayList<BeanUserSub>();
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();
        System.out.println("idposc: " + idposc);
        try {
            conSAP.RegistrarRFC("ZHR_RFC_BUSQ_COLAB_FUNC");
            conSAP.IngresarDatosInput(idposc, "ID_JEFE");
            if (!periodo.equals("")) conSAP.IngresarDatosInput(periodo, "PERIODO");
            conSAP.EjecutarRFC();
            com.sap.mw.jco.JCO.Table usuario = null;

            usuario = conSAP.rFC.getTableParameterList().getTable("T_SUBORDINADO");

            for (int i = 0; i < usuario.getNumRows(); i++) {
                usuario.setRow(i);
                BeanUserSub user = new BeanUserSub();
                user.setStrIdEmpleado(usuario.getString("ID_EMPLEADO"));
                user.setStrApaterno(usuario.getString("APATERNO"));
                user.setStraMaterno(usuario.getString("AMATERNO"));
                user.setStrNombre(usuario.getString("NOMBRE"));
                user.setStrNombreComp(usuario.getString("NOMBCOMP"));
                user.setIntId_posc(usuario.getInt("ID_POSC"));
                user.setStrDescrip_Idp(usuario.getString("DESCRIP_IDP"));
                user.setStrID_Funcion(usuario.getString("ID_FUNCION"));
                user.setStrIdArea(usuario.getString("ID_AREA"));
                user.setStrArea(usuario.getString("DESC_AREA"));
//                Grado
                if(Util.isDouble(usuario.getString("TOPE_ORG")))
                	user.setDbltope_org(Double.parseDouble(usuario.getString("TOPE_ORG")));
                else
                	user.setDbltope_org(Double.parseDouble("0.0"));
                
                if(Util.isDouble(usuario.getString("TOTAL_TOPE_MAX")))
                	user.setDblTotal_Tope_Max(Double.parseDouble(usuario.getString("TOTAL_TOPE_MAX")));
                else
                	user.setDblTotal_Tope_Max(Double.parseDouble("0.0"));
                
                if(Util.isDouble(usuario.getString("TOTAL_TOPE_MIN")))
                	 user.setDblTotal_Tope_Min(Double.parseDouble(usuario.getString("TOTAL_TOPE_MIN")));
                else
                	 user.setDblTotal_Tope_Min(Double.parseDouble("0.0"));
                
                if(Util.isDouble(usuario.getString("TOTAL_TOPE_MIN")))
                	user.setDblTotal_Tope_Min(Double.parseDouble(usuario.getString("TOTAL_TOPE_MIN")));
                else
                	user.setDblTotal_Tope_Min(Double.parseDouble("0.0"));
                
                if(Util.isInteger(usuario.getString("TOPE_AD_INF")))
                	user.setIntTope_ad_sup(usuario.getInt("TOPE_AD_INF"));
                else
                	user.setIntTope_ad_sup(0);
                
                if(Util.isInteger(usuario.getString("TOPE_AD_SUP")))
                	user.setIntTope_ad_inf(usuario.getInt("TOPE_AD_SUP"));
                else
                	user.setIntTope_ad_inf(0);
                	
                
                user.setStrIdEtapa(usuario.getString("ID_ETAPA"));
                user.setStrEtapa(usuario.getString("DESC_ETAPA"));
                user.setStrIdEstado(usuario.getString("ID_ESTADO"));
                if(usuario.getString("DESC_ESTADO").equals("ABIERTO")){
                    user.setStrEstado("PENDIENTE");
                }
                else{
                    user.setStrEstado(usuario.getString("DESC_ESTADO"));
                }
                user.setMail(usuario.getString("MAIL"));
//                ID_ESTADO_COMP
                user.setStrDescCompetencia(usuario.getString("DESC_ESTADO_COMP"));
//                ID_ESTADO_EVALINT
                user.setStrDescIntegral(usuario.getString("DESC_ESTADO_EVALINT"));
//                ID_ESTADO_PLANACC
                user.setStrDescPlanAccion(usuario.getString("DESC_ESTADO_PLANACC"));
                user.setMail(usuario.getString("MAIL"));
                user.setMailEvaluador(usuario.getString("MAIL_EVALDR"));
               // System.out.println("ColaFuncional mailevaluador : " +  user.getMailEvaluador());
                user.setStrJJNombreComp(usuario.getString("NOM_JEFE"));
                user.setStrJJmail(usuario.getString("MAIL_JEFE"));
                
                //TIPOEMPLEADO
                if(user.getStrDescCompetencia().equals("")){
                    user.setStrDescCompetencia("PENDIENTE");
                }

                if(user.getStrDescIntegral().equals("")){
                    user.setStrDescIntegral("PENDIENTE");
                }

                if(user.getStrDescPlanAccion().equals("")){
                    user.setStrDescPlanAccion("PENDIENTE");
                }
                //PuestoJJ
                user.setPuestoJJ(usuario.getString("POS_EVALUADOR"));
                System.out.println("PuestoJJ: " + user.getPuestoJJ());
                lstUser.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            conSAP.DesconectarSAP();
        }

        return lstUser;
    }
    
//    Fin Alex
    
    public BeanUsuario getUsuario(String idUsuario) throws Exception {
        BeanUsuario user = null;
        ConexionSAP conSAP = ConexionSAP.getConexionSAP();

        try {
            conSAP.RegistrarRFC("ZHR_RFC_PERFIL_SS");
            conSAP.IngresarDatosInput(idUsuario, "USER");
            conSAP.EjecutarRFC();
            user = new BeanUsuario();
            //user.setIdUsuarioEmpleado(idUsuarioEmpleado);
            user.setIntrol(conSAP.rFC.getExportParameterList().getField("ROL").getInt());
            user.setStrId_Posicion(conSAP.rFC.getExportParameterList().getField("ID_POSC").getString());
            user.setStrPernr(conSAP.rFC.getExportParameterList().getField("ID_EMPLEADO").getString());
            user.setStrMail(conSAP.rFC.getExportParameterList().getField("MAIL").getString());
            user.setStrDescrip_Idp(conSAP.rFC.getExportParameterList().getField("DESCRIP_IDP").getString());
            user.setStrName(conSAP.rFC.getExportParameterList().getField("NAME").getString());
            user.setStrNombre_EMP(conSAP.rFC.getExportParameterList().getField("NOMBRE_EMP").getString());
            user.setStrApe_Pat_EMP(conSAP.rFC.getExportParameterList().getField("APE_PAT_EMP").getString());
            user.setStrApe_Mat_EMP(conSAP.rFC.getExportParameterList().getField("APE_MAT_EMP").getString());
            user.setStrDesc_Uo(conSAP.rFC.getExportParameterList().getField("DESC_UO").getString());
            user.setStrfuncion(conSAP.rFC.getExportParameterList().getField("ID_FUNCION").getString());
            if (!conSAP.rFC.getExportParameterList().getField("TOPE_ORG").getString().equals("")) {
            	user.setDblTope_Org(Double.parseDouble(conSAP.rFC.getExportParameterList().getField("TOPE_ORG").getString()));
			}else {
				user.setDblTope_Org(Double.parseDouble("0"));
			}
            
            user.setDbltotal_tope_max(Double.parseDouble(conSAP.rFC.getExportParameterList().getField("TOTAL_TOPE_MAX").getString()));
            user.setDbltotal_tope_min(Double.parseDouble(conSAP.rFC.getExportParameterList().getField("TOTAL_TOPE_MIN").getString()));
            user.setInttotal_ad_inf(Integer.parseInt(conSAP.rFC.getExportParameterList().getField("TOPE_AD_INF").getString()));
            user.setInttotal_ad_sup(Integer.parseInt(conSAP.rFC.getExportParameterList().getField("TOPE_AD_SUP").getString()));
            user.setStrJefe(conSAP.rFC.getExportParameterList().getField("DESC_EVALUADOR").getString());
            	System.out.println("user.setStrJefe: " + user.getStrJefe());
            user.setStrPuesto(conSAP.rFC.getExportParameterList().getField("POS_EVALUADOR").getString());
            user.setStrArea(conSAP.rFC.getExportParameterList().getField("DESC_AREA").getString());
            user.setStrCodJefe(conSAP.rFC.getExportParameterList().getField("ID_EVALUADOR").getString());//URgente
            user.setStrMailJefe(conSAP.rFC.getExportParameterList().getField("MAIL_EVALUADOR").getString());
            user.setStrAdministrador(conSAP.rFC.getExportParameterList().getField("ADMIN").getString());
            //Tengo que agregar el idUsuarioJefe para luego obtener el mail del jefe 
            //Esto es para la evaluacion integral, que se tiene que obtener el mail del jefe del jefe.
            		System.out.println("USER_EVAL " + conSAP.rFC.getExportParameterList().getField("USER_EVAL").getString());
            user.setIdUsuarioJefe(conSAP.rFC.getExportParameterList().getField("USER_EVAL").getString());
//            Alex
            		System.out.println("FLG_JEFEFUNC " + conSAP.rFC.getExportParameterList().getField("FLG_JEFEFUNC").getString());
            user.setFlagJefeFuncional(conSAP.rFC.getExportParameterList().getField("FLG_JEFEFUNC").getString());
            		System.out.println("ID_SUPLENTE " + conSAP.rFC.getExportParameterList().getField("ID_SUPLENTE").getString());
            user.setStrId_Suplente(conSAP.rFC.getExportParameterList().getField("ID_SUPLENTE").getString());
            		System.out.println("MAIL_SUPLENTE " + conSAP.rFC.getExportParameterList().getField("MAIL_SUPLENTE").getString());
            user.setStrMailSuplente(conSAP.rFC.getExportParameterList().getField("MAIL_SUPLENTE").getString());
            
            
            user.setGrado(Integer.parseInt(conSAP.rFC.getExportParameterList().getField("GRADO").getString()));
            user.setPermite(conSAP.rFC.getExportParameterList().getField("PERMITE").getString());
            user.setExcluye(conSAP.rFC.getExportParameterList().getField("EXCLUYE").getString());
            
            	System.out.println("GRADO: " + conSAP.rFC.getExportParameterList().getField("GRADO").getString());
            	System.out.println("PERMITE: " + conSAP.rFC.getExportParameterList().getField("PERMITE").getString());
            	System.out.println("EXCLUYE: " + conSAP.rFC.getExportParameterList().getField("EXCLUYE").getString());
//            Fin Alex
            
        } catch (Exception e) {

           System.out.println("+++++++++++++ Excepcion Controlada ++++++++++++++++++");
            e.printStackTrace();
           System.out.println("+++++++++++++++++++++++++++++++");
        } finally {
            conSAP.DesconectarSAP();
        }
        return user;
    }
}